package mysql8学习.高级.第07章_InnoDB数据存储结构存储;

/**
 * 系统表空间
 * 系统表空间的结构和独立表空间基本类似，只不过由于整个MySQL进程只有一个系统表空间，
 * 在系统表空间中会额外记录一些有关整个系统信息的页面， 这部分是独立表空间中没有的。
 *
 * InnoDB数据字典
 * 每当我们向一个表中插入一条记录的时候， MySQL校验过程 如下:
 * 先要校验一下插入语句对应的表存不存在,插入的列和表中的列是否符合，
 * 如果语法没有问题的话，
 * 还需要知道该表的聚簇索引和所有二级索引对应的根页面是哪个表空间的哪个页面，
 * 然后把记录插入对应索引的B+树中。
 * 所以说，MySQL除了保存着我们插入的用户数据之外，还需要保存许多额外的信息，
 * 比方说:
 *     -某个表属于哪个表空间，表里边有多少列
 *     -表对应的每一个列的类型是什么
 *     -该表有多少索引，每个索引对应哪几个字段，
 *          该索引对应的根页面在哪个表空间的哪个页面
 *     -该表有哪些外键，外键对应哪个表的哪些列
 *     -某个表空间对应文件系统上文件路径是什么
 *     ...
 * 上述这些数据并不是我们使用INSERT语句插入的用户数据，
 * 实际上是为了更好的管理我们这些用户数据而不得已引入的一些额外数据，这些数据也称为元数据。
 * InnoDB存储引擎特意定义了一些列的内部系统表来记录这些这些元数据:
 * 表名                                   描述
 * SYS_TABLES           整个InnoDB存储引擎中所有的表的信息
 * SYS_COLUMNS          整个InnoDB存储引擎中所有的列的信息
 * SYS_INDEXES          整个InnoDB存储引擎中所有的索引的信息
 * SYS_FIELDS           整个InnoDB存储引擎中所有的索引对应的列的信息
 * SYS_FOREIGN          整个InnoDB存储引擎中所有的外键的信息
 * SYS_FOREIGN_COLS     整个InnoDB存储引擎中所有的外键对应列的信息
 * SYS_TABLESPACES      整个InnoDB存储引擎中所有的表空间信息
 * SYS_DATAFILES        整个InnoDB存储引擎中所有的表空间对应文件系统的文件路径信息
 * SYS_VIRTUAL          整个InnoDB存储引擎中所有的虚拟生成列的信息
 *
 * 这些系统表也被称为数据字典，它们都是以B+树的形式保存在系统表空间的某些页面中,
 * 其中SYS_TABLES、 SYS_COLUMNS、SYS_INDEXES、 SYS_FIELDS这四个表尤其重要，
 * 称之为基本系统表(basic system tables) ,
 *
 * 注意:用户是不能直接访问InnoDB的这些内部系统表，
 * 除非你直接去解析系统表空间对应文件系统上的文件。
 * 不过考虑到查看这些表的内容可能有助于大家分析问题，
 * 所以在系统数据库 information_schema 中提供了一些以 innodb_sys 开头的表:
 * 在information_schema数据库中的这些以INNODB.
 * SYS开头的表并不是真正的内部系统表(内部系统表就是我们上边以SYS开头的那些表)，
 * 而是在存储弓|擎启动时读取这些以SYS开头的系统表，
 * 然后填充到这些以 INNODB_SYS 开头的表中。
 * 以INNODB_SYS 开头的表和以SYS开头的表中的字段并不完全一样，
 * 但供大家参考已经足矣。
 *
 *
 */
public class I2_系统表空间 {
}
